/**
 * 批量生成海报图片脚本
 * 
 * 该脚本支持从JSON文件读取配置，批量生成多个海报图片
 * 用法: node scripts/batch-generate.js <配置文件路径>
 */

const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');

// 默认配置
const DEFAULT_OUTPUT_OPTIONS = {
  fullPage: false,
  element: true,
  elementWithBg: true,
  pdf: false
};

/**
 * 从文件加载JSON配置
 * @param {string} filePath 配置文件路径
 * @returns {Array} 配置数组
 */
function loadConfig(filePath) {
  try {
    const configPath = path.resolve(process.cwd(), filePath);
    if (!fs.existsSync(configPath)) {
      throw new Error(`配置文件不存在: ${configPath}`);
    }
    
    const configData = fs.readFileSync(configPath, 'utf8');
    const config = JSON.parse(configData);
    
    if (!Array.isArray(config)) {
      throw new Error('配置文件必须包含一个数组');
    }
    
    return config;
  } catch (error) {
    console.error(`加载配置失败: ${error.message}`);
    process.exit(1);
  }
}

/**
 * 生成海报
 * @param {Object} config 单个海报配置
 * @param {number} index 索引
 */
function generatePoster(config, index) {
  try {
    const { 
      template, 
      outputPrefix, 
      templateData, 
      transparent = true, 
      outputOptions = DEFAULT_OUTPUT_OPTIONS 
    } = config;
    
    if (!template) {
      throw new Error('缺少必需的template字段');
    }
    
    // 构建输出前缀
    const prefix = outputPrefix || `batch_${index}_${Date.now()}`;
    
    // 准备模板数据
    const templateDataArg = templateData 
      ? JSON.stringify(templateData).replace(/"/g, '\\"')
      : 'null';
    
    // 准备输出选项
    const outputOptionsArg = outputOptions 
      ? JSON.stringify(outputOptions).replace(/"/g, '\\"')
      : 'null';
    
    // 构建命令
    const cmd = `node html2image.js ${template} ${prefix} ${transparent} "${templateDataArg}" "${outputOptionsArg}"`;
    
    console.log(`[${index + 1}] 生成海报: ${template} -> ${prefix}`);
    execSync(cmd, { stdio: 'inherit' });
    
    return true;
  } catch (error) {
    console.error(`[${index + 1}] 生成失败: ${error.message}`);
    return false;
  }
}

// 主函数
function main() {
  // 获取命令行参数
  const args = process.argv.slice(2);
  
  if (args.length < 1) {
    console.log('用法: node scripts/batch-generate.js <配置文件路径>');
    console.log('配置文件示例:');
    console.log(`[
  {
    "template": "templates/basic-poster.html",
    "outputPrefix": "basic_poster_1",
    "templateData": {
      "title": "海报标题1",
      "subtitle": "海报副标题",
      "text": "海报内容"
    },
    "transparent": true,
    "outputOptions": {
      "fullPage": false,
      "element": true,
      "elementWithBg": true,
      "pdf": false
    }
  },
  {
    "template": "templates/product-poster.html",
    "outputPrefix": "product_poster_1",
    "templateData": {
      "title": "商品名称",
      "description": "商品描述",
      "price": "¥299",
      "originalPrice": "¥399"
    }
  }
]`);
    process.exit(0);
  }
  
  const configFile = args[0];
  const configs = loadConfig(configFile);
  
  console.log(`开始批量生成，共 ${configs.length} 个任务`);
  console.log('----------------------------------------');
  
  let successCount = 0;
  
  // 批量处理
  configs.forEach((config, index) => {
    const success = generatePoster(config, index);
    if (success) {
      successCount++;
    }
    console.log('----------------------------------------');
  });
  
  console.log(`批量处理完成: ${successCount}/${configs.length} 个成功`);
}

// 执行主函数
main(); 